package com.lhd.usermanagement.common;

import lombok.Data;

import java.io.Serializable;

/**
 * BaseResponse泛型类，用于封装API响应数据，包括状态码、数据、消息和详细描述。
 *
 * @param <T> 数据类型泛型，可根据实际响应内容确定。
 */
@Data
public class BaseResponse<T> implements Serializable{

    /**
     * 序列化版本号，用于对象序列化与反序列化的版本控制。
     */
    private static final long serialVersionUID = -6656868176867680241L;

    /**
     * 响应状态码。
     */
    private final int code;

    /**
     * 响应携带的数据。
     */
    private final T data;

    /**
     * 响应的简要描述或提示信息。
     */
    private final String message;

    /**
     * 响应的详细描述信息，提供更多上下文。
     */
    private final String description;

    /**
     * 构造方法，用于创建一个完整的BaseResponse实例。
     *
     * @param code       响应状态码。
     * @param data       响应数据。
     * @param message    响应消息。
     * @param description 响应详细描述。
     */
    public BaseResponse(int code, T data, String message, String description) {
        this.code = code;
        this.data = data;
        this.message = message;
        this.description = description;
    }

    /**
     * 构造方法，根据错误码和自定义描述创建错误响应。
     *
     * @param errorCode 错误码对象，包含预定义的错误码和消息。
     * @param description 自定义的错误描述信息。
     */
    public BaseResponse(ErrorCode errorCode, String description) {
        this.code = errorCode.getCode();
        this.data = null;
        this.message = errorCode.getMessage();
        this.description = description;
    }

    /**
     * 构造方法，直接使用错误码对象创建错误响应，描述信息取自错误码内部定义。
     *
     * @param errorCode 错误码对象，包含预定义的错误码、消息及描述。
     */
    public BaseResponse(ErrorCode errorCode) {
        this.code = errorCode.getCode();
        this.data = null;
        this.message = errorCode.getMessage();
        this.description = errorCode.getDescription();
    }

    public BaseResponse(int errorCode, String message, String description) {
        this.code = errorCode;
        this.data = null;
        this.message = message;
        this.description = description;
    }
}
